package com.chaos.auth.service.oauth;

import com.chaos.auth.api.data.oauth.OauthAccessTokenData;
import com.chaos.auth.entity.OauthAccessToken;
import com.chaos.auth.mapper.OauthAccessTokenMapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.chaos.framework.model.dto.page.PageList;
import com.chaos.framework.model.dto.page.PageQueryDto;
import com.chaos.framework.model.entity.Table;
import com.chaos.framework.model.helper.ConvertHelper;
import com.chaos.framework.model.helper.PageHelper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * @author Jacky
 * @since 2024-05-07
 */
@Slf4j
@Component
public class OauthAccessTokenService extends ServiceImpl<OauthAccessTokenMapper, OauthAccessToken> {

    public String insertModel(OauthAccessTokenData data) {
        OauthAccessToken entity = ConvertHelper.convert(data, OauthAccessToken.class);
        return save(entity) ? entity.getAuthenticationId() : "";
    }

    public boolean deleteModel(String authenticationId) {
        return removeById(authenticationId);
    }

    public boolean updateModelByID(OauthAccessTokenData data) {
        OauthAccessToken entity = ConvertHelper.convert(data, OauthAccessToken.class);
        return update(entity, new UpdateWrapper<OauthAccessToken>().lambda().eq(OauthAccessToken::getAuthenticationId, data.getAuthenticationId()));
    }

    public OauthAccessTokenData selectByID(String authenticationId) {
        return ConvertHelper.convert(getOne(new QueryWrapper<OauthAccessToken>().lambda()
                .eq(OauthAccessToken::getAuthenticationId, authenticationId)), OauthAccessTokenData.class);
    }

    public List<OauthAccessTokenData> selectByData(OauthAccessTokenData data) {
        QueryWrapper<OauthAccessToken> query = new QueryWrapper();
        query.orderByDesc(Table.ID);
        return ConvertHelper.convert(list(query), OauthAccessTokenData.class);
    }

    public PageList<OauthAccessTokenData> selectByPage(PageQueryDto<OauthAccessTokenData> pageData) {
        QueryWrapper<OauthAccessToken> query = new QueryWrapper();
        query.orderByDesc(Table.ID);
        return PageHelper.pageList(page(PageHelper.page(pageData), query), OauthAccessTokenData.class);
    }

}
